fastJSON
语法
JSON 语法是 JavaScript 对象表示语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
1 | {syn:[1,2,3]} 表示syn的值是一个数组,里面有三个元素 1 2 3 |
JSON 对象
1 | { |
JSON 对象数组
1 | [ |
JSON 字符串
- 它必须是一个字符串,由
""
或者''
包裹数据,支持字符串的各种操作。 - 里面的数据格式应该要满足其中一个格式,可以是JSON对象,也可以是JSON对象数组或者是基本形式的组合变形。
fastJSON
fastJSON可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
使用
在fastJSON中,可以发现三个主要的类,JSON,JSONObject,JSONArray。
三者的关系是JSONObject 和JSONArray 继承JSON。
JSONObject是JSON字符串与pojo对象转换过程中的中间表达类型,实现了Map接口,可以看做是一个模拟JSON对象键值对再加上多层嵌套的数据集合,对象的每一个基本类型属性是map里的一个key-value,一个非基本类型属性是一个嵌套的JSONObject对象(key是属性名称,value是表示这个属性值的对象的JSONObject)。
可以发现,JSONObject代表json对象,JSONArray代表json对象数组,JSON代表JSONObject和JSONArray的转化。
JSONObject 对象JSON对象,通过各种形式的get()方法可以获取json对象中的数据,也可利用诸如size(),isEmpty()等方法获取”键:值”对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的。
JSONArray代表json对象数组,json数组对象中存储的是一个个json对象,所以类中的方法主要用于直接操作json对象。比如这其中的add(),remove(),containsAll()方法,对应于json对象的添加,删除与判断。和JSONObject 一样,其中也有一些get()方法,不过都不常用,最常用的是getJSONObject(int index)方法,该方法用于获取json对象数组中指定位置的JSONObject对象,配合size()方法,可用于遍历json对象数组中的各个对象。
JSON类主要是实现转化用的,最后的数据获取,还是要通过上面的JSONObject和JSONArray来实现。
- JSON.toJSONString()方法,实现JSON对象转换为json字符串和Javabean 转换为json字符串。
- JSON.parseObject()方法,实现json字符串转换为json对象或javabean对象,该方法返回JSONObject对象,用于实现json字符串向json对象的转化。json字符串与javaBean之间的转换可以使用 Class这个类。
- JSON.parseArray()将json字符串转化为json对象数组或转化成包含泛型的List
- JSON.toJSON()方法,实现JavaBean对象转换为json对象。
- JSON.toJavaObject()方法,实现json对象转化为javabean对象
对于jsonstring转POJO(或POJO转jsonstring),尽量使用直接转的方式,而不是先转成JSONObject过渡的方式。特别是对于Fastjson,由于性能优化的考虑,这两个执行的代码是不一样的,可能导致不一样的结果。
1 | String jsonstring = "{\"a\":12}"; |
最佳实践
序列化一个Java对象成JSON字符串
1 | User user = new User(); |
反序列化一个JSON字符串成Java对象
1 | String jsonString = "{\"age\":3,\"birthdate\":1496738822842,\"name\":\"校长\",\"old\":true,\"salary\":123456789.0123}"; |
Author: corn1ng
Link: https://corn1ng.github.io/2019/08/05/fastJSON 速览/
License: 知识共享署名-非商业性使用 4.0 国际许可协议